//////////////////////////////////////////////////////////////////////////////////
//                                                                              //
//  This file is part of the buola project (https://code.google.com/p/buola/).  //
//                                                                              //
//  Copyright(c) 2007-2012 Xavi Gratal                                          //
//  gratal AT gmail DOT com                                                     //
//                                                                              //
//  Buola is free software: you can redistribute it and/or modify               //
//  it under the terms of the GNU General Public License as published by        //
//  the Free Software Foundation, either version 3 of the License, or           //
//  (at your option) any later version.                                         //
//                                                                              //
//  Buola is distributed in the hope that it will be useful,                    //
//  but WITHOUT ANY WARRANTY; without even the implied warranty of              //
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               //
//  GNU General Public License for more details.                                //
//                                                                              //
//  You should have received a copy of the GNU General Public License           //
//  along with buola.  If not, see <http://www.gnu.org/licenses/>.              //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////

#ifndef _BUOLA_SCENE_IMPORT_VRML_CTOKEN_H_
#define _BUOLA_SCENE_IMPORT_VRML_CTOKEN_H_

#include <buola/buola.h>

#include "enums.h"

namespace buola { namespace scene { namespace vrml {

struct CToken
{
    typedef std::vector<char>::const_iterator TIt;

    CToken()
        :   mToken(TOKEN_INVALID)
    {}
    
    CToken(EToken pToken,const TIt &pB,const TIt &pE)
        :   mToken(pToken)
        ,   mB(pB)
        ,   mE(pE)
    {}
    
    std::string Text() const {   return std::string(mB,mE);  }
    
    bool operator==(const CToken &pRH)
    {
        return mToken==pRH.mToken&&mB==pRH.mB&&mE==pRH.mE;
    }
    
    bool operator!=(const CToken &pRH)
    {
        return !operator==(pRH);
    }
    
    explicit operator bool()    {    return mToken!=TOKEN_INVALID; }
    
    EToken mToken;
    TIt mB;
    TIt mE;
};

typedef std::vector<CToken>::const_iterator TTokenIt;
typedef std::pair<TTokenIt,TTokenIt> TTokenRange;

/*namespace vrml */ } /*namespace scene*/ } /*namespace buola*/ }

#endif
